XPath এবং JSoup দুটোই HTML বা XML ডকুমেন্ট থেকে ডাটা এক্সট্র্যাক্ট করতে ব্যবহৃত হয়। যদিও জেসুপ নিজের API দিয়ে HTML ডকুমেন্ট থেকে ডাটা বের করার জন্য খুবই শক্তিশালী, তবুও অনেক সময় XPath ব্যবহার করা হয় যখন আরো জটিল ও নির্দিষ্ট পাথের মাধ্যমে ডাটা এক্সট্র্যাক্ট করতে হয়। JSoup ডকুমেন্ট থেকে XPath মত চাহিদা অনুযায়ী ডাটা বের করার জন্য .select() মেথডে CSS সিলেক্টর ব্যবহার করে কাজ করে।
এই টিউটোরিয়ালে আমরা দেখব কিভাবে XPath ধারণাকে JSoup-এ কনভার্ট করে ডাটা এক্সট্র্যাক্ট করা যায়।
XPath এবং JSoup এর মধ্যে পার্থক্য
- XPath: XML বা HTML ডকুমেন্টের নির্দিষ্ট এলিমেন্ট বা নোডের অবস্থান চিহ্নিত করার জন্য ব্যবহৃত একটি ভাষা।
- JSoup: Java লাইব্রেরি যা HTML ডকুমেন্ট পার্সিং এবং ডেটা এক্সট্র্যাকশনের জন্য ব্যবহৃত হয়, এবং CSS সিলেক্টর ব্যবহার করে ডাটা এক্সট্র্যাক্ট করা যায়।
JSoup দিয়ে XPath সমতুল্য ডাটা এক্সট্র্যাকশন
যদিও জেসুপ সরাসরি XPath সমর্থন করে না, তবে CSS সিলেক্টর ব্যবহার করে আপনি XPath-এর কার্যকারিতা কিছুটা অনুকরণ করতে পারেন। CSS সিলেক্টরের মাধ্যমে HTML ডকুমেন্টের বিভিন্ন উপাদানকে নির্বাচিত করা যায়। এটি XPath-এ ব্যবহৃত নানা সিলেক্টরের মতো কাজ করে।
উদাহরণ: XPath এবং CSS সিলেক্টর তুলনা
ধরা যাক, একটি HTML পেজের কিছু উপাদান আমরা এক্সট্র্যাক্ট করতে চাই:
<html>
<head><title>XPath and JSoup Example</title></head>
<body>
<div id="content">
<h1>Welcome to XPath and JSoup</h1>
<p class="description">This is a tutorial on using JSoup and XPath.</p>
<p class="info">Learn more about web scraping.</p>
<a href="https://www.example.com">Visit Example</a>
</div>
</body>
</html>
এখন আমরা এই HTML ডকুমেন্ট থেকে কিছু ডাটা এক্সট্র্যাক্ট করতে চাই:
- Title:
<title>ট্যাগের মধ্যে থাকা ডাটা। - Paragraph with class 'description':
class="description"সহ<p>ট্যাগ। - Anchor tag (link):
<a>ট্যাগেরhrefঅ্যাট্রিবিউট।
JSoup ব্যবহার করে এক্সট্র্যাকশন
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
public class JsoupXPathExample {
public static void main(String[] args) throws Exception {
String html = "<html><head><title>XPath and JSoup Example</title></head><body>" +
"<div id='content'>" +
"<h1>Welcome to XPath and JSoup</h1>" +
"<p class='description'>This is a tutorial on using JSoup and XPath.</p>" +
"<p class='info'>Learn more about web scraping.</p>" +
"<a href='https://www.example.com'>Visit Example</a>" +
"</div></body></html>";
// HTML পার্সিং
Document doc = Jsoup.parse(html);
// 1. Title এক্সট্র্যাক্ট করা
String title = doc.select("title").text();
System.out.println("Title: " + title);
// 2. Paragraph with class 'description' এক্সট্র্যাক্ট করা
String description = doc.select("p.description").text();
System.out.println("Description: " + description);
// 3. Anchor Tag (link) এক্সট্র্যাক্ট করা
String link = doc.select("a").attr("href");
System.out.println("Link: " + link);
}
}
কোড ব্যাখ্যা
doc.select("title"): CSS সিলেক্টর ব্যবহার করে<title>ট্যাগের মধ্যে থাকা টেক্সট এক্সট্র্যাক্ট করা হয়েছে। এটি XPath এর//titleসমতুল্য।doc.select("p.description"): CSS সিলেক্টর ব্যবহার করেclass="description"সহ<p>ট্যাগের মধ্যে থাকা টেক্সট এক্সট্র্যাক্ট করা হয়েছে। এটি XPath এর//p[@class='description']সমতুল্য।doc.select("a").attr("href"):<a>ট্যাগেরhrefঅ্যাট্রিবিউট এক্সট্র্যাক্ট করা হয়েছে। এটি XPath এর//a/@hrefসমতুল্য।
XPath এর ব্যবহারযোগ্য CSS সিলেক্টর
| XPath | CSS সিলেক্টর | ব্যাখ্যা |
|---|---|---|
//tagname | tagname | ট্যাগ অনুযায়ী নির্বাচন। |
//tagname[@attribute='value'] | tagname[attribute=value] | অ্যাট্রিবিউট অনুযায়ী নির্বাচন। |
//tagname[contains(@attribute, 'value')] | tagname[attribute~=value] | অ্যাট্রিবিউটে অংশের মিল। |
//tagname[text()='value'] | tagname:contains('value') | ট্যাগের টেক্সট অনুযায়ী নির্বাচন। |
এই টেবিলের মাধ্যমে আপনি দেখতে পারেন কিভাবে XPath এর কিছু সাধারণ সিলেক্টর CSS সিলেক্টরের মাধ্যমে অনুকরণ করা যায়।
সারাংশ
জেসুপ (JSoup) এর মাধ্যমে XPath সমতুল্য ডাটা এক্সট্র্যাকশন করা সম্ভব CSS সিলেক্টর ব্যবহার করে। XPath এর মাধ্যমে নির্দিষ্ট HTML বা XML এলিমেন্ট এক্সট্র্যাক্ট করার জন্য যে পাথ ব্যবহার করা হয়, সেই পাথের কার্যকারিতা JSoup এর .select() মেথডের মাধ্যমে CSS সিলেক্টর দিয়ে অনুকরণ করা যায়। এই প্রক্রিয়া ওয়েব স্ক্র্যাপিংয়ের জন্য খুবই কার্যকরী এবং সহজ।
Read more